#include<iostream>
#include<cstdarg>
#include<memory>
#include<functional>
using namespace std;


// 饿汉模式
// 思想：以空间换时间
// 1.一运行就要初始化类,只能调用接口来创建--只能创建一个（这就是线程安全的）
// 2.静态成员类外初始化,初始化阶段完成（以空间换时间）
// class Apple
// {
// private:
//     static Apple _app;
//     int _data;
// private:
//     Apple():_data(100)
// {
//     cout << "单例构造"<<endl;
// }
//     ~Apple(){}

// public:
//     Apple(const Apple&) =delete;
//     Apple & operator=(const Apple&)=delete;
//     static Apple &getinstance()
//     {
//         return _app;
//     }
//     void print()
//     {
//         cout<<_data<<endl;
//     }


// };
// Apple Apple::_app;  



// int main()
// {
//      Apple::getinstance().print(); //初始化




//     return 0;
// }

//懒汉模式
//1.思想：延迟加载 一个对象在用的时候再实例化
//2.c++11 静态对象才能保证线程安全（初始化一次，其他线程阻塞）,否则需要加锁
//
class Apple
{
private:    
    int _data;
    Apple():_data(100)
    {
        cout<<"单例构造"<<endl;
    }
    ~Apple(){}

public:
    Apple(const Apple&) =delete;
    Apple & operator=(const Apple&)=delete;
    static Apple &getinstance()
    {
        static Apple _app; 
        return _app;
    }
    void print()
    {
        cout<<_data<<endl;
    }

};







int main()
{
    // Apple::getinstance().print(); 




    return 0;
}